from flask import Flask, render_template, jsonify
from app import DobotController
import time

app = Flask(__name__)

# 创建机械臂控制器实例
arm = DobotController()

@app.route('/')
def index():
    """渲染主页面"""
    return render_template('index.html', ip="localhost")

@app.route('/api/position')
def get_position():
    """获取机械臂位置信息"""
    pos = arm.read_position()
    if pos is None:
        return jsonify({'error': '读取位置失败'}), 500
    return jsonify(pos)

@app.route('/api/control/<cmd>')
def control(cmd):
    """控制机械臂
    
    Args:
        cmd: start/pause/resume/stop/estop 之一
    """
    try:
        # 确保已连接
        if not arm.client.is_socket_open():
            if not arm.connect():
                return jsonify({'error': '机械臂未连接'}), 500
        
        # 发送控制命令
        arm.trigger_script(cmd)
        
        # 如果是启动命令，等待机械臂进入运行状态
        if cmd == 'start':
            for _ in range(50):  # 最多等待 5 秒
                run = arm.is_running()
                if run is None:
                    return jsonify({'error': '读取状态失败'}), 500
                if run:
                    return jsonify({'message': '已进入运行状态'})
                time.sleep(0.1)
            return jsonify({'error': '启动超时'}), 500
        
        return jsonify({'message': f'命令 {cmd} 已发送'})
    except ValueError as e:
        return jsonify({'error': str(e)}), 400
    except Exception as e:
        return jsonify({'error': f'操作失败: {e}'}), 500

if __name__ == '__main__':
    # 启动时连接机械臂
    if not arm.connect():
        print('警告：机械臂连接失败')
    app.run(host='0.0.0.0', port=5000, debug=True)